// packageA/pages/afterVisitAdd/afterVisitAdd.js
const app = getApp();
import CommonService from '../../../utils/service/commonService.js';
import Toast from '../../../miniprogram_npm/@vant/weapp/toast/toast';
const util = require('../../../utils/util');
import Base64 from '../../../utils/Base64.js';

Page({

  /**
   * 页面的初始数据
   */
  data: {
    //提交按钮禁用
    disabled:false,
    //传参来的id
    id:null,
    //传参来的售后记录id
    afterssrid:null,
    //修改信息回显
    editInfo:{},
    //上门人员选择框
    showStaff:false,
    //上门人员选择数据
    staffList:[],
    //当前时间
    currentStart: new Date().getTime(),
    currentEnd: new Date().getTime(),
    //开始时间选择框
    showStartTime:false,
    //结束时间选择框
    showEndTime:false,
    //最小时间
    minDate:null,
    //最大时间
    maxDate: new Date().getTime(),
    //时间格式
    formatter (type, value) {
      if (type === 'year') {
        return `${value}年`
      } else if (type === 'month') {
        return `${value}月`
      } else if (type === 'day') {
        return `${value}日`
      } else if (type === 'hour') {
        return `${value}时`
      } else if (type === 'minute') {
        return `${value}分`
      } else if (type === 'second') {
        return `${value}秒`
      }
      return value
    },
    //避免表单重复提交
    code:null,
    //是否是编辑
    isEdit:false,
    //服务详情
    serviceDetails:[],
    //费用表id
    costId:null,
    //客户支付配件费
    clientCosts:null,
    //搜索人员输入的值
    valueSearchStaff:'',
    //平台id
    myAppId:null
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.setData({
      code:Base64.encode(new Date() + app.globalData.userInfo.userName),
      myAppId:app.globalData.myAppId
    })

    if(options.paramObj){
      let paramObj=JSON.parse(options.paramObj);
      if(paramObj.id){
        this.setData({
          id: paramObj.id,
          isEdit:true
        })
        //获取要修改的数据
        this.getInfo();

        //查询费用
        this.getCost();
      }

      if(paramObj.afterssrid){
        this.setData({
          afterssrid: paramObj.afterssrid
        })
        //获取售后服务详情
        this.getAfterDetail();
      }
    }
  },

  //提交表单
  confirmForm(e){
    let obj=e.detail.value;
    let td=this.data;
    let info=td.editInfo;

    //验证
    if(!info.staffId){
      Toast.fail('请选择上门人员');
      return;
    }

    let param={
      className:'afterVisitRecord',
      data:{
        requestToken: td.code,
        id: td.id,
        //售后记录id
        afterssrid:td.afterssrid,
        //上门人员id
        staffId: info.staffId,
        //上门人员姓名
        name: info.name,
        //电话
        phone:info.phone,
        //开始时间
        d2dDateTime:info.d2dDateTime,
        //结束时间
        d2dEndDateTime:info.d2dEndDateTime,
        //外部or内部人员
        type:info.type,
        //外部人员费用
        staffCost:Number(obj.staffCost),
        //公里数
        kilometres:Number(obj.kilometres),
        //每公里/元
        kilometresCost:Number(obj.kilometresCost),
        //过路(桥)费
        toll:Number(obj.toll),
        //补贴费用
        subsidy:Number(obj.subsidy),
        //备注
        remark:obj.remark,
        //客户支付费用
        clientCosts:Number(obj.clientCosts),
      }
    }

    //console.log(param);

    CommonService.goSave(param).then(res=>{
      if (res.statusCode == 200 && res.data.success == true){
        Toast.success('成功');

        //售后记录增加详情
        this.insertAfterDetail();

        //更新费用记录
        this.addCost(res.data.data.id,param.data);

        setTimeout(() => {
          //返回列表页并刷新数据
          this.backAndRefresh();
        }, 1000);
      }else if(res.statusCode==202){
        Toast.fail('您操作太快了,请勿重复提交');
      }else{
        Toast.fail('操作失败');
      }
    }).catch((error) => {
      Toast.fail('操作失败');
    })
  },

  //获取要修改的数据
  getInfo(){
    let param = {
      isAuth: false,
      className: 'afterVisitRecord',
      data: {
        id:this.data.id,
        selectFields: ['id','afterssrid', 'name', 'phone', 'type', 'visitDate', 'repairOverDate', 'visitMoney', 'journey', 'remark', 'isSet', 'staffId', 'd2dDateTime', 'd2dEndDateTime', 'staffCost', 'kilometres', 'subsidy', 'toll', 'kilometresCost', 'costsList','clientCosts'],
        nbl:Base64.encode(util.timeFormatDay(new Date()))
      }
    }

    CommonService.goFindList(param).then(res => {
      if(res.data.data && res.data.data.result && res.data.data.result.length) {
        let result=res.data.data.result;
        console.log('上门信息回显');
        console.log(result[0]);

        //处理时间
        result[0].d2dDateTime=util.timeFormat(result[0].d2dDateTime);
        result[0].d2dEndDateTime=util.timeFormat(result[0].d2dEndDateTime);

        this.setData({
          editInfo: result[0],
          afterssrid:result[0].afterssrid
        })
      }
    }).catch((error) => {
    })
  },

  //非空验证（field要先去掉空格）
  formNotEmpty(field,messageField,messageCon){
    if(!field){
      let obj = {};
      obj[messageField] = messageCon;
      obj['disabled'] = true;
      this.setData(obj);
      return false;
    }else{
      return true;
    }
  },

  //用户输入时清除错误提示
  clearMessage(e) {
    let field = e.target.dataset.message;
    let obj = {};
    obj[field] = "";
    obj['disabled'] = false;
    this.setData(obj);
  },

  //返回列表页并刷新数据
  backAndRefresh(){
    let pages = getCurrentPages();
    let prevPage = pages[pages.length - 2];

    prevPage.refreshListAndPage();
    wx.navigateBack();
  },

  //显示上门人员选择框
  onShowStaff(){
    this.setData({
			showStaff: true
    })
    this.getStaffList();
  },

  //查询上门人员
  getStaffList(){
    this.setData({
      staffList: []
    })

    let param = {
      isAuth: false,
      className: 'servicePersonal',
      data: {
        searchAll: true,
        selectFields: ['id', 'serviceName', 'telephone', 'type'],
        sort: {
          id: -1
        },
      }
    }

    //按平台查询记录
    let appId=app.globalData.myAppId;
    if(appId!=3){
      if(app.globalData.afterSaleSelf){
        //是否独立售后
        param.data.appId=app.globalData.myAppId;
      }else{
        param.data.appId=[2,3,null];
      }
    }else{
      param.data.appId=[2,3,null];
    }

    //人员模糊查询
    if(this.data.valueSearchStaff){
      param.data.serviceName='%'+this.data.valueSearchStaff+'%'
    }

    CommonService.goFindList(param).then(res=>{
      if(res.data.data && res.data.data.result && res.data.data.result.length){
        let result=res.data.data.result;
        let arr=[];
        result.forEach(item => {
          arr.push({
            text:item.serviceName,
            id:item.id,
            obj:item
          });
        });
        this.setData({
          staffList: arr
        })
      }
    }).catch((error) => {
    })
  },

  //隐藏上门人员选择框
  onCloseStaff(){
    this.setData({
      showStaff: false,
      valueSearchStaff:''
    })
  },

  //确认上门人员
  onConfirmStaff(e){
    let val=e.detail.value;
    let staffId='editInfo.staffId',
        name='editInfo.name',
        phone='editInfo.phone',
        type='editInfo.type';

    this.setData({
      [staffId]:val.id,
      [name]:val.text,
      [phone]:val.obj.telephone,
      [type]:val.obj.type,
    })

    this.onCloseStaff();
  },

  //人员费用
  onBlurStaffCost(e){
    let num=e.detail.value;
    if(num){
      if((/^([0-9][0-9]*)+(.[0-9]{1,2})?$/).test(num)){
      }else{
        this.setData({
          staffCostMessage: '请输入数字',
          disabled: true
        })
      }
    }    
  },

  //输入客户支付配件费
  onBlurClientCosts(e){
    let num=e.detail.value;
    if(num){
      if((/^([0-9][0-9]*)+(.[0-9]{1,2})?$/).test(num)){
        this.setData({
          clientCosts:num
        })
      }else{
        this.setData({
          clientCostsMessage: '请输入数字',
          disabled: true
        })
      }
    }  
  },

  //显示开始时间选择框
  onShowStartTime(){
    this.setData({
			showStartTime: true
    })
  },

  //隐藏开始时间选择框
  onCloseStartTime(){
    this.setData({
			showStartTime: false
    })
  },

  //确认开始时间
  onConfirmStartTime(e) {
    let d2dDateTime='editInfo.d2dDateTime';
    this.setData({
      currentStart: e.detail,
      minDate:e.detail,
      [d2dDateTime]:util.timeFormat(e.detail)
    })
    this.onCloseStartTime();
  },

  //显示结束时间选择框
  onShowEndTime(){
    this.setData({
			showEndTime: true
    })
  },

  //隐藏结束时间选择框
  onCloseEndTime(){
    this.setData({
			showEndTime: false
    })
  },

  //确认结束时间
  onConfirmEndTime(e) {
    let d2dEndDateTime='editInfo.d2dEndDateTime';
    this.setData({
      currentEnd: e.detail,
      [d2dEndDateTime]:util.timeFormat(e.detail)
    })
    this.onCloseEndTime();
  },

  //获取售后服务详情
  getAfterDetail(){
    let param = {
      isAuth: false,
      className: 'afterSaleServiceRecord',
      data: {
        id:this.data.afterssrid,
        selectFields: ['id','serviceDetails']
      }
    }

    CommonService.goFindList(param).then(res => {
      if(res.data.data && res.data.data.result && res.data.data.result.length) {
        let result=res.data.data.result;
        this.setData({
          serviceDetails: result[0].serviceDetails
        })
      }
    }).catch((error) => {
    })
  },

  //售后记录增加详情，增加上门标识
  insertAfterDetail(){
    let td=this.data;
    let user = app.globalData.userInfo;
    let serviceDetails=td.serviceDetails;

    if(td.isEdit){
      serviceDetails.push({
        content: user.userName + "修改上门服务信息",
        datetime: util.timeFormat(new Date())
      });
    }else{
      serviceDetails.push({
        content: user.userName + "添加上门服务信息",
        datetime: util.timeFormat(new Date())
      });
    }

    let param={
      className:'afterSaleServiceRecord',
      data:{
        id:td.afterssrid,
        serviceDetails:serviceDetails,
        isVisit:true
      }
    }

    CommonService.goSave(param).then(res=>{
    }).catch((error) => {
    })
  },

  //查询费用
  getCost(){
    let param = {
      isAuth: false,
      className: 'afterSaleCostsRecord',
      data: {
        searchAll: true,
        itemId:this.data.id,
        type:2,
        selectFields: ['id'],
        nbl:Base64.encode(util.timeFormatDay(new Date()))
      }
    }
    CommonService.goFindList(param).then(res => {
      if(res.data.data && res.data.data.result && res.data.data.result.length) {
        let result=res.data.data.result;  
        this.setData({
          costId: result[0].id
        })
      }
    }).catch((error) => {
    })
  },

  //添加/编辑费用记录
  addCost(id,info){
    let td=this.data;

    //处理平台维修费-区分外部or内部人员
    let maintain=0;
    if(info.type==33){
      //内部人员 = 公里数 * 公里/元 + 过路(桥)费 + 补贴费用
      maintain = Number(info.kilometres) * Number(info.kilometresCost) + Number(info.toll) + Number(info.subsidy);
    }else{
      //外部人员 = 人员费用
      maintain = Number(info.staffCost);
    }

    let param={
      className:'afterSaleCostsRecord',
      data:{
        id:td.costId,
        //售后记录id
        afterId:td.afterssrid,
        //类型（1配件，2上门）
        type:2,
        //上门人员姓名
        name:info.name,
        //上门表id
        itemId:id,
        //平台支付费用
        platformCosts:{
          //维修费
          maintain: maintain,
          //配件费用
          part:0,
          //总费用
          total:maintain,
        },
        //客户支付费用
        clientCosts:{
          //服务费
          service:Number(info.clientCosts),
          //配件费
          part:0,
          //总费用
          total:Number(info.clientCosts),
        }
      }
    }
    
    CommonService.goSave(param).then(res=>{
    }).catch((error) => {
    })
  },

  //跳转添加售后人员
  goToAddStaff(){
    wx.navigateTo({
      url: "/packageA/pages/servicePersonalAdd/servicePersonalAdd"
    })
  },

  //选择人员-搜索
  onChangeStaff(e){
    this.setData({
      valueSearchStaff: e.detail
    })
    this.getStaffList();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  }
})
